﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Tipler.DataSetler;
using Tipler.Enumlar;
using Tipler.Siniflar;
using System.Data;
using System.Text;
using IKYSWeb.Siniflar;
using System.Collections;
using System.Drawing;
using Tipler.OzellikTipleri;
using IsKurallari.Yetki;

namespace IKYSWeb.Yetki
{
	[YetkiAttribute(EnumSayfaYetkileri.Herkes_Yetkili)]
	public partial class KullaniciOdeme : BasePage
	{
		#region Session Özellikleri
		private int KullaniciID
		{
			get { return (int)Session["KullaniciOdeme_KullaniciID"]; }
			set { Session["KullaniciOdeme_KullaniciID"] = value; }
		}

		private KullancıOdemeDataSet KullaniciOdemeListesi
		{
			get { return (KullancıOdemeDataSet)Session["YETKI_Kullanici_Odeme_LISTE"]; }
			set { Session["YETKI_Kullanici_Odeme_LISTE"] = value; }
		}

		private int SecilenKullaniciOdemeID
		{
			get { return (int)ViewState["YETKI_Kullanici_Odeme_ID"]; }
			set { ViewState["YETKI_Kullanici_Odeme_ID"] = value; }
		}
		#endregion

		protected void Page_Load(object sender, EventArgs e)
		{
			if (!IsPostBack)
			{
                if (Request.QueryString["KullaniciID"] == null)
                {
                    MesajGoster(Page, "Geçersiz kullanıcı Erişimi", MesajTipiEnum.Hata);
                    return;
                }
				KullaniciID = Convert.ToInt32(Request.QueryString["KullaniciID"].ToString());

				YetkiIsKurali oYetki = new YetkiIsKurali();
				FonksiyonSonuc<KullaniciDataSet> fsKullanici = oYetki.KullaniciGetirbyKullaniciID(KullaniciID);
				KullaniciDataSet.KullaniciRow gecerliKullanici = fsKullanici.Sonuc.Kullanici.FindByKullaniciID(KullaniciID);
				lblGecerliKullanici.Text = gecerliKullanici.Adi.ToUpper() + " " + gecerliKullanici.Soyadi.ToUpper();
				ucOdemeTarihi.Tarih = DateTime.Now;
				ucSonGecerlilikTarihi.Tarih = DateTime.Now.AddYears(1);

				mv.SetActiveView(vListe);

				KullaniciOdemeGetir();
			}
		}

		private void KullaniciOdemeGetir()
		{
			YetkiIsKurali oYetki = new YetkiIsKurali();
			FonksiyonSonuc<KullancıOdemeDataSet> fsKullaniciOdeme = oYetki.KullaniciOdemeGetirbyKullaniciID(KullaniciID);

			KullaniciOdemeListesi = fsKullaniciOdeme.Sonuc;
			grdOdemeListe.DataSource = KullaniciOdemeListesi;
			grdOdemeListe.DataBind();
		}

		protected void grdOdemeListe_RowDataBound(object sender, GridViewRowEventArgs e)
		{
            YetkiIsKurali oYetki = new YetkiIsKurali();
            FonksiyonSonuc<Decimal> toplam = oYetki.KullaniciOdemeToplamGetirbyKullaniciID(KullaniciID);
            lblToplamUcret.Text = toplam.Sonuc.ToString();

			if (e.Row.RowType == DataControlRowType.DataRow)
			{
				KullancıOdemeDataSet.KullancıOdemeRow dr = (KullancıOdemeDataSet.KullancıOdemeRow)((DataRowView)(e.Row.DataItem)).Row;

				if (e.Row.RowType == DataControlRowType.DataRow)
				{
					e.Row.Cells[SutunSirasiGetir(grdOdemeListe, "Ücret")].Text = dr.Ucret.ToString() + " TL";
					e.Row.Cells[SutunSirasiGetir(grdOdemeListe, "Ödeme Tarihi")].Text = dr.OdemeTarihi.ToShortDateString();

					int rowIndex = e.Row.DataItemIndex;
					int id = Convert.ToInt32(grdOdemeListe.DataKeys[rowIndex].Value.ToString());
					Button odemeGuncelle = (Button)e.Row.FindControl("Guncelle");
					FonksiyonSonuc<int> odemeID = oYetki.KullaniciSonOdemeIDGetirbyKullaniciID(KullaniciID);
					if (id != odemeID.Sonuc)
						e.Row.Cells[3].Controls.Clear();
				}
			}
		}

		protected void grdOdemeListe_RowCommand(object sender, GridViewCommandEventArgs e)
		{
			if (e.CommandName != "Page")
			{
				int rowIndex = Convert.ToInt32(e.CommandArgument);
				int id = Convert.ToInt32(grdOdemeListe.DataKeys[rowIndex].Value.ToString());

				if (e.CommandName == "Guncelle")
				{
					SecilenKullaniciOdemeID = id;
					FormHazirla(id);
					mv.SetActiveView(vKayit);
				}
			}
		}

		private void FormHazirla(int kullaniciOdemeID)
		{
			YetkiIsKurali oYetki = new YetkiIsKurali();
			FonksiyonSonuc<KullancıOdemeDataSet> oSonucOdeme = oYetki.KullaniciOdemeGetirbyKullaniciID(KullaniciID);

			if (oSonucOdeme.HataVarMi)
				throw new Exception(oSonucOdeme.Hata + " " + oSonucOdeme.ExMesaji);

			KullaniciOdemeListesi = oSonucOdeme.Sonuc;
			KullancıOdemeDataSet.KullancıOdemeRow drOdeme = KullaniciOdemeListesi.KullancıOdeme.FindByKullancıOdemeID(kullaniciOdemeID);
            txtOdemeMiktariEdit.OndalikSayi = Convert.ToDouble(drOdeme.Ucret);
			ucOdemeTarihiEdit.Tarih = drOdeme.OdemeTarihi;
			ucSonGecerlilikTarihiEdit.Tarih = drOdeme.SonGecerlilikTarihi;
		}

		protected void btnKaydet_Click(object sender, EventArgs e)
		{
			YetkiIsKurali oYetki = new YetkiIsKurali();
			KullancıOdemeDataSet.KullancıOdemeRow drOdeme = KullaniciOdemeListesi.KullancıOdeme.NewKullancıOdemeRow();

			drOdeme = KullaniciOdemeListesi.KullancıOdeme.NewKullancıOdemeRow();
			drOdeme.KullancıOdemeID = -1;
			drOdeme.KullaniciID = KullaniciID;
			drOdeme.Ucret = Convert.ToDecimal(txtOdemeMiktari.OndalikSayi);
			drOdeme.OdemeTarihi = ucOdemeTarihi.Tarih;
			drOdeme.SonGecerlilikTarihi = ucSonGecerlilikTarihi.Tarih;
            if (drOdeme.OdemeTarihi.AddMonths(1) > drOdeme.SonGecerlilikTarihi)
            {
                MesajGoster(Page, "Son geçerlilik tarihi ödeme tarihinden en az 1 ay ileri olmalıdır.", MesajTipiEnum.Hata);
                return;
            }

			if (drOdeme.KullancıOdemeID == -1)
				KullaniciOdemeListesi.KullancıOdeme.AddKullancıOdemeRow(drOdeme);

			FonksiyonSonuc<KullaniciDataSet> oSonucKullanicilar = oYetki.KullaniciSorgula("", "", "", EnumAktifPasif.Aktif.GetHashCode(), -1, -1, -1, KullaniciID);
			KullaniciDataSet KullaniciListesi = oSonucKullanicilar.Sonuc;
			foreach (KullaniciDataSet.KullaniciRow drKullanici in KullaniciListesi.Kullanici.Rows)
			{
				//burasi niye böyle lan birden fazla olunca nasıl kaydedecek bu?
				drKullanici.SonGecerlilikTarihi = drOdeme.SonGecerlilikTarihi;
			}

			if (KullaniciOdemeListesi.HasChanges())
			{
				FonksiyonSonuc<Boolean> oSonuc = oYetki.KullaniciOdemeKaydet(KullaniciListesi, KullaniciOdemeListesi);

				if (oSonuc.HataVarMi)
				{
					KullaniciOdemeListesi.RejectChanges();

					MesajGoster(Page, oSonuc.Hata, MesajTipiEnum.Hata);
					return;
				}

				KullaniciOdemeListesi.AcceptChanges();
				KullaniciOdemeGetir();
			}
			FormTemizle();
			mv.SetActiveView(vListe);
			MesajGoster(Page, "Kullanici ödeme bilgisi başarı ile kaydedilmiştir.", MesajTipiEnum.Basari);
		}

		protected void btnGeri_Click(object sender, EventArgs e)
		{
            YetkiIsKurali oYetki = new YetkiIsKurali();
            FonksiyonSonuc<KullancıOdemeDataSet> fsKullaniciOdeme = oYetki.KullaniciOdemeGetirbyKullaniciID(KullaniciID);

            KullaniciOdemeListesi = fsKullaniciOdeme.Sonuc;
            grdOdemeListe.DataSource = KullaniciOdemeListesi;
            grdOdemeListe.DataBind();
            //vListe.DataBind();
			mv.SetActiveView(vListe);
		}
		private void FormTemizle()
		{
            txtOdemeMiktari.Clear();
			ucSonGecerlilikTarihi.Clear();
			ucOdemeTarihi.Clear();
		}

		protected void btnGuncelle_Click(object sender, EventArgs e)
		{
			YetkiIsKurali oYetki = new YetkiIsKurali();
			KullancıOdemeDataSet.KullancıOdemeRow drOdeme = KullaniciOdemeListesi.KullancıOdeme.NewKullancıOdemeRow();

			drOdeme = KullaniciOdemeListesi.KullancıOdeme.FindByKullancıOdemeID(SecilenKullaniciOdemeID);
			drOdeme.Ucret = Convert.ToDecimal(txtOdemeMiktariEdit.OndalikSayi);
			drOdeme.OdemeTarihi = ucOdemeTarihiEdit.Tarih;
			drOdeme.SonGecerlilikTarihi = ucSonGecerlilikTarihiEdit.Tarih;

            if (drOdeme.OdemeTarihi.AddMonths(1) > drOdeme.SonGecerlilikTarihi)
            {
                MesajGoster(Page, "Son geçerlilik tarihi ödeme tarihinden en az 1 ay ileri olmalıdır.", MesajTipiEnum.Hata);
                return;
            }

			FonksiyonSonuc<KullaniciDataSet> oSonucKullanicilar = oYetki.KullaniciSorgula("", "", "", EnumAktifPasif.Aktif.GetHashCode(), -1, -1, -1, KullaniciID);
			KullaniciDataSet KullaniciListesi = oSonucKullanicilar.Sonuc;

			foreach (KullaniciDataSet.KullaniciRow drKullanici in KullaniciListesi.Kullanici.Rows)
			{
				drKullanici.SonGecerlilikTarihi = drOdeme.SonGecerlilikTarihi;
			}

			if (KullaniciOdemeListesi.HasChanges())
			{
				FonksiyonSonuc<Boolean> oSonuc = oYetki.KullaniciOdemeKaydet((KullaniciDataSet)KullaniciListesi.GetChanges(),
																			  (KullancıOdemeDataSet)KullaniciOdemeListesi.GetChanges());

				if (oSonuc.HataVarMi)
				{
					KullaniciOdemeListesi.RejectChanges();

					MesajGoster(Page, oSonuc.Hata, MesajTipiEnum.Hata);
					return;
				}

				KullaniciOdemeListesi.AcceptChanges();
				KullaniciOdemeGetir();
			}
			MesajGoster(Page, "Kullanici ödeme bilgisi başarı ile güncellenmiştir.", MesajTipiEnum.Basari);
			FormTemizle();
			mv.SetActiveView(vListe);
		}
	}
}